package com.fs.controller.admin;

import com.fs.dto.ProductGalleryAddDTO;
import com.fs.entity.ProductGallery;
import com.fs.result.Result;
import com.fs.service.ProductGalleryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 商品图片/展示管理 - 控制层
 * 路径：/admin/product/gallery
 * 说明：图片的添加、更新、删除、查看
 */
@RestController("adminProductGalleryController")
@RequestMapping("/admin/product/gallery")
@Api(tags = "商品图片接口")
@Slf4j
public class ProductGalleryController {

    @Autowired
    private ProductGalleryService galleryService;

    /**
     * 添加图片（单张）
     */
    @PostMapping("/add")
    @ApiOperation("添加商品展示图片")
    public Result<String> add(@RequestBody ProductGalleryAddDTO dto) {
        log.info("请求 - 添加图片：{}", dto);
        galleryService.add(dto);
        return Result.success("图片添加成功");
    }

    /**
     * 更新图片信息（text 或 image 或 sort）
     */
    @PutMapping("/update")
    @ApiOperation("更新商品展示图片（图片/说明/排序）")
    public Result<String> update(@RequestBody ProductGallery dto) {
        log.info("请求 - 更新图片：{}", dto);
        galleryService.update(dto);
        return Result.success("图片更新成功");
    }

    /**
     * 删除单张或多张图片（按图片 id 列表）
     * 路径示例： /admin/product/gallery/delete/10,11,12
     */
    @DeleteMapping("/delete/{ids}")
    @ApiOperation("删除图片（按图片ID列表）")
    public Result<String> delete(@PathVariable("ids") String ids) {
        log.info("请求 - 删除图片 ids={}", ids);
        List<Long> idList = Arrays.stream(ids.split(","))
                .map(String::trim).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
        galleryService.deleteByIds(idList);
        return Result.success("删除成功");
    }

    /**
     * 查看某商品的所有图片（按 sort 升序）
     */
    @GetMapping("/list/{productId}")
    @ApiOperation("查看商品的所有展示图片")
    public Result<List<ProductGallery>> listByProduct(@PathVariable Long productId) {
        log.info("请求 - 查询商品图片 productId={}", productId);
        List<ProductGallery> list = galleryService.listByProductId(productId);
        return Result.success(list);
    }
}
